#ifndef ARCHIVOBINARIO_H_INCLUDED
#define ARCHIVOBINARIO_H_INCLUDED

#include <fstream>


class ArchivoBinario {
private:
  std::fstream  archivo;  // referencia al archivo
  std::string filePathName;

public:
    /**
    * Abre el archivo ubicado en el path pasado (debe incluir nombre completo) en modo lectura/escritura.
    * Deja el cursor al comienzo del mismo.
    * En caso de no existir el archivo, lo crea.
    * Si no puede realizar la operaci�n, arroja una excepci�n
    */
    ArchivoBinario(const std::string& path);


    /**
    * Cierra el archivo (no lo destruye f�sicamente
    */
    ~ArchivoBinario();

    /**
    * Lee del archivo la cantidad de Bytes especificada
    * a partir de la posici�n indicada
    */
    bool leerBytes(int pos, int size, char* const buffer);

    bool leerBloque(int nroBloque, int size, char* const buffer);

    bool leerBloque(int size, char* const buffer);

    /**
    * Posiciona el cursor al comienzo del archivo
    */
    void irAlPrincipio();

    /**
    * Escribe una cantidad de Bytes en la posici�n indicada
    *  Si no puede escribir, arroja una excepci�n
    */
    void grabarBytes(int pos, unsigned int size,  char* const buffer);

    void grabarBloque(int nroBloque, unsigned int size,  char* const buffer);

    unsigned int agregarBloque(unsigned int size, char* const buffer);


    void cerrar();

    void abrir(bool & esNuevo);
    void abrir();

    unsigned int  getPosLectura();


};



#endif // ARCHIVOBINARIO_H_INCLUDED
